home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1992-03-06 | 25.8 KB | 955 lines |
- ' **************************************************************
- '
- ' =============
- '
- ' PACMAN MAPPER
- '
- ' =============
- '
- ' - As Seen On TV! (the one you're looking at now) -
- '
- ' /\/\/\/\/\/\/\/\/\
- ' By: Paul Nordovics
- ' \/\/\/\/\/\/\/\/\/
- '
- ' Notes:
- ' ======
- '
- ' This Mapper Can Be Used/Modified For Your Own Games But Please
- ' Don't Pass It Off As Your Own Work!
- '
- ' **************************************************************
- '
- ' ******************************************************************
- ' Set Up Mapper Display:
- ' The Mapper Panel Is Stored In Bank 2 Which Is Unpacked To Screen 0
- ' ******************************************************************
- Unpack 2 To 0
- Screen Display 0,128,45,320,256
- '
- ' *******************
- ' Set Up Mapper Panel
- ' *******************
- MAZE_NUMBER=0
- Gosub _SHOW_MAZE_NUMBER
- '
- BLOCK_NUMBER=1
- Gosub _SHOW_BLOCK
- '
- ' *********************************
- ' Set Up Zones For Buttons On Panel
- ' *********************************
- Reserve Zone 14
- Set Zone 1,15,237 To 30,252 : Rem Prev Maze
- Set Zone 2,33,237 To 48,252 : Rem Next Maze
- Set Zone 3,64,224 To 111,239 : Rem Load
- Set Zone 4,64,240 To 111,255 : Rem Save
- Set Zone 5,112,224 To 143,239 : Rem Copy
- Set Zone 6,112,240 To 143,255 : Rem Paste
- Set Zone 7,144,224 To 191,239 : Rem Undo Last
- Set Zone 8,144,240 To 191,255 : Rem Undo All
- Set Zone 9,243,230 To 252,239 : Rem Next Block
- Set Zone 10,243,240 To 252,249 : Rem Prev Block
- Set Zone 11,256,224 To 287,239 : Rem Clear
- Set Zone 12,256,240 To 287,255 : Rem Grid
- Set Zone 13,288,224 To 319,239 : Rem Spare Button
- Set Zone 14,288,240 To 319,255 : Rem Bye!
- '
- ' ****************************************
- ' Make Space For Map,Undo And Copy Buffers
- ' ****************************************
- Reserve As Work 10,(260*100)+(260*3)+(260)
- '
- MAPPER_BASE=Start(10)
- UNDO_BASE=Start(10)+(260*100)
- UNDO_POINTER=0
- _COPY_BASE=UNDO_BASE+(260*3)
- '
- ' *************************************************************
- '
- ' If You Use This Mapper For Other Games, Change These Values:
- ' LAST MAZE = The Number Of Mazes You Have Created-1
- ' i.e. If You Have 100 Mazes, Set This Value To 99
- '
- ' LAST BLOCK = The Number Of Map Blocks You Have
- '
- ' *************************************************************
- LAST_MAZE=19
- LAST_BLOCK=42
- '
- _WAIT_DELAY=5
- '
- ' ********************************************
- ' Position Mouse Pointer At Top-Left Of Screen
- ' And Prevent It From Going Off-Screen
- ' ********************************************
- X Mouse=128 : Y Mouse=45
- Limit Mouse 128,45 To 128+319,45+255
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' MAIN LOOP
- ' *************************************************************
- Do
- Wait Vbl
- ' ************************************
- ' Get Mouse Co-ords Once Only Per Loop
- ' ************************************
- MOUSE_X=X Screen(X Mouse)/16 : MOUSE_Y=Y Screen(Y Mouse)/16
- '
- ' *********************************************************
- ' Test For Functions Accessed By Pressing Left Mouse Button
- ' *********************************************************
- If Mouse Key=1
- ' *********************************************
- ' Flag So We Know Left Mouse Button Was Pressed
- ' *********************************************
- LMB=1
- ' *********************************
- ' Are We Pointing At Maze Work Area
- ' *********************************
- If MOUSE_Y<13
- ' *******************************
- ' Is Space Bar Being Pressed Also
- ' *******************************
- If Key State($40)
- ' **************************************
- ' Yes - So Delete Block At Mouse Pointer
- ' **************************************
- Gosub DELETE_BLOCK
- Else
- ' ************************************
- ' No - So Place Block At Mouse Pointer
- ' ************************************
- Gosub PLACE_BLOCK
- End If
- Else
- ' *******************************************
- ' See If We Want To Use A Function From Panel
- ' *******************************************
- Gosub CHANGE_MAZE_NUMBER
- Gosub _LOAD
- Gosub _SAVE
- Gosub _COPY
- Gosub PASTE
- Gosub UNDO_LAST
- Gosub UNDO_ALL
- Gosub CHANGE_BLOCK
- Gosub CLEAR
- Gosub _TOGGLE_GRID
- Gosub BYE
- End If
- End If
- ' **********************************************************
- ' Test For Functions Accessed By Pressing Right Mouse Button
- ' **********************************************************
- If Mouse Key=2
- ' *************************************
- ' Are We Pointing To The Maze Work Area
- ' *************************************
- If MOUSE_Y<13
- ' ***************************************************************
- ' Yes - So Change The Current Block To The One We Are Pointing At
- ' ***************************************************************
- MAZE_POINTER=Start(10)+(MAZE_NUMBER*260)+(MOUSE_Y*20)+MOUSE_X
- If Peek(MAZE_POINTER)<>BLOCK_NUMBER and Peek(MAZE_POINTER)>0
- BLOCK_NUMBER=Peek(MAZE_POINTER)
- Gosub _SHOW_BLOCK
- End If
- End If
- End If
- Loop
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- '
- ' =======
- ' GOSUB'S
- ' =======
- '
- ' Shoved At The End Of The Program So They Are Out Of The Way
- '
- ' *************************************************************
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' SHOW MAZE NUMBER
- '
- ' Displays The Current Maze Number On The Functions Panel
- ' *************************************************************
- _SHOW_MAZE_NUMBER:
- ' ********************
- ' Blank Out Last Value
- ' ********************
- Cls 2,37,227 To 45,236
- '
- ' ***********************
- ' Show 10's Part Of Value
- ' ***********************
- X1=MAZE_NUMBER/10
- Screen Copy 0,(X1*4),256,(X1*4)+4,263 To 0,37,227
- '
- ' ************************
- ' Show Units Part Of Value
- ' ************************
- X0=MAZE_NUMBER-(X1*10)
- Screen Copy 0,(X0*4),256,(X0*4)+4,263 To 0,41,227
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' SHOW BLOCK
- '
- ' Displays The Current, Chosen Block On The Functions Panel
- ' *************************************************************
- _SHOW_BLOCK:
- ' ********************
- ' Blank Out Last Block
- ' ********************
- Cls 0,221,231 To 222+17,232+17
- '
- ' ******************
- ' Show Current Block
- ' ******************
- Paste Bob 222,232,BLOCK_NUMBER
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' CHANGE MAZE NUMBER
- '
- ' Move To Either The Previous Or The Next Maze
- ' *************************************************************
- CHANGE_MAZE_NUMBER:
- ' *******************
- ' Go To Previous Maze
- ' *******************
- If Mouse Zone=1 and MAZE_NUMBER>0 and LMB=1
- ' ****************
- ' Highlight Button
- ' ****************
- X0=15 : Y0=237 : X1=30 : Y1=252
- Gosub HIGHLIGHT_BUTTON
- '
- ' ******************************
- ' Onto Previous Maze And Show It
- ' ******************************
- Add MAZE_NUMBER,-1
- Gosub _SHOW_MAZE_NUMBER
- Gosub _SHOW_MAZE
- '
- UNDO_POINTER=0
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' **********************
- ' And Unhighlight Button
- ' **********************
- X0=15 : Y0=237 : X1=30 : Y1=252
- Gosub UNHIGHLIGHT_BUTTON
- End If
- '
- ' ***************
- ' Go To Next Maze
- ' ***************
- If Mouse Zone=2 and MAZE_NUMBER<LAST_MAZE and LMB=1
- ' ****************
- ' Highlight Button
- ' ****************
- X0=33 : Y0=237 : X1=48 : Y1=252
- Gosub HIGHLIGHT_BUTTON
- '
- ' **************************
- ' Onto Next Maze And Show It
- ' **************************
- Add MAZE_NUMBER,1
- Gosub _SHOW_MAZE_NUMBER
- Gosub _SHOW_MAZE
- '
- UNDO_POINTER=0
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' ******************
- ' Unhighlight Button
- ' ******************
- X0=33 : Y0=237 : X1=48 : Y1=252
- Gosub UNHIGHLIGHT_BUTTON
- End If
- Return
- '
- ' -------------------------------------------------------------
- ' *************************************************************
- ' HIGHLIGHT BUTTON
- '
- ' Draws A White Box Around A Button To Show It Has Been
- ' Selected
- ' *************************************************************
- HIGHLIGHT_BUTTON:
- Ink 1
- Box X0,Y0 To X1,Y1
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' UNHIGHLIGHT BUTTON
- '
- ' Draws A Black Box Around The Selected Button To Indicate That
- ' The Function Has Been Completed
- ' *************************************************************
- UNHIGHLIGHT_BUTTON:
- Ink 0
- Box X0,Y0 To X1,Y1
- Return
- '
- ' -------------------------------------------------------------
- '
- ' ************************************************************
- ' PLACE BLOCK
- '
- ' Puts The Current, Chosen Block Into The Maze Work Area at
- ' The Place Specified By The Mouse Pointer
- ' ************************************************************
- PLACE_BLOCK:
- ' ***********************************************************
- ' Only Do If The Block Being Placed Is Different To The Block
- ' Already There
- ' ***********************************************************
- MAZE_POINTER=Start(10)+(MAZE_NUMBER*260)+(MOUSE_Y*20)+MOUSE_X
- If Peek(MAZE_POINTER)<>BLOCK_NUMBER
- '
- ' ******************
- ' Update Undo Buffer
- ' ******************
- X=MOUSE_X : Y=MOUSE_Y : Z=MAZE_POINTER
- Gosub _UPDATE_UNDO_BUFFER
- '
- ' *********************
- ' Put Block Onto Screen
- ' *********************
- Cls 0,MOUSE_X*16,MOUSE_Y*16 To(MOUSE_X*16)+16,(MOUSE_Y*16)+16
- Paste Bob MOUSE_X*16,MOUSE_Y*16,BLOCK_NUMBER
- '
- ' **********************************
- ' Replace Grid Section If Grid Is On
- ' **********************************
- If GRID=1
- Ink 1
- Box MOUSE_X*16,MOUSE_Y*16 To(MOUSE_X*16)+15,(MOUSE_Y*16)+15
- End If
- '
- ' *****************
- ' Update Map Buffer
- ' *****************
- MAZE_POINTER=Start(10)+(MAZE_NUMBER*260)+(MOUSE_Y*20)+MOUSE_X
- Poke MAZE_POINTER,BLOCK_NUMBER
- '
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' SHOW MAZE
- '
- ' Draws The Current Maze To The Maze Work Area
- ' *************************************************************
- _SHOW_MAZE:
- MAZE_POINTER=Start(10)+MAZE_NUMBER*260
- ' ******************************
- ' Clear The Maze Work Area First
- ' ******************************
- Cls 0,0,0 To 320,208
- '
- ' ******************
- ' Draw In The Blocks
- ' ******************
- For Y=0 To 12
- For X=0 To 19
- BLOCK=Peek(MAZE_POINTER)
- If BLOCK>0
- Paste Bob X*16,Y*16,BLOCK
- End If
- Add MAZE_POINTER,1
- Next X
- Next Y
- '
- ' ***************
- ' Draw Grid If On
- ' ***************
- Gosub _DRAW_GRID
- '
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' LOAD
- '
- ' Loads The Maze Data From Disk
- ' *************************************************************
- _LOAD:
- If Mouse Zone=3 and LMB=1
- ' ****************
- ' Highlight Button
- ' ****************
- X0=64 : Y0=224 : X1=111 : Y1=239
- Gosub HIGHLIGHT_BUTTON
- '
- ' ********************
- ' Get Data And Show It
- ' ********************
- Load "me_disk:map_data.abk"
- Gosub _SHOW_MAZE
- '
- UNDO_POINTER=0
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' ******************
- ' Unhighlight Button
- ' ******************
- X0=64 : Y0=224 : X1=111 : Y1=239
- Gosub UNHIGHLIGHT_BUTTON
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' SAVE
- '
- ' Saves The Maze Data To Disk
- ' *************************************************************
- _SAVE:
- If Mouse Zone=4 and LMB=1
- ' ****************
- ' Highlight Button
- ' ****************
- X0=64 : Y0=240 : X1=111 : Y1=255
- Gosub HIGHLIGHT_BUTTON
- '
- Save "me_disk:map_data.abk",10
- '
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' ******************
- ' Unhighlight Button
- ' ******************
- X0=64 : Y0=240 : X1=111 : Y1=255
- Gosub UNHIGHLIGHT_BUTTON
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' CHANGE BLOCK
- '
- ' Changes The Current, Chosen Block To Either The Previous Or
- ' Next Value
- ' *************************************************************
- CHANGE_BLOCK:
- ' **********
- ' Next Block
- ' **********
- If Mouse Zone=9 and BLOCK_NUMBER<LAST_BLOCK and LMB=1
- ' ****************
- ' Highlight Button
- ' ****************
- X0=243 : Y0=230 : X1=252 : Y1=239
- Gosub HIGHLIGHT_BUTTON
- '
- ' ********************************
- ' Get Next Block And Show On Panel
- ' ********************************
- Add BLOCK_NUMBER,1
- Gosub _SHOW_BLOCK
- '
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' ******************
- ' Unhighlight Button
- ' ******************
- X0=243 : Y0=230 : X1=252 : Y1=239
- Gosub UNHIGHLIGHT_BUTTON
- End If
- '
- ' **************
- ' Previous Block
- ' **************
- If Mouse Zone=10 and BLOCK_NUMBER>1 and LMB=1
- ' ****************
- ' Highlight Button
- ' ****************
- X0=243 : Y0=240 : X1=252 : Y1=249
- Gosub HIGHLIGHT_BUTTON
- '
- ' ******************************
- ' Get Previous Block And Show It
- ' ******************************
- Add BLOCK_NUMBER,-1
- Gosub _SHOW_BLOCK
- '
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' ******************
- ' Unhighlight Button
- ' ******************
- X0=243 : Y0=240 : X1=252 : Y1=249
- Gosub UNHIGHLIGHT_BUTTON
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' CLEAR
- '
- ' Clears The Current, Visible Maze
- ' *************************************************************
- CLEAR:
- If Mouse Zone=11 and LMB=1
- ' ****************
- ' Highlight Button
- ' ****************
- X0=256 : Y0=224 : X1=287 : Y1=239
- Gosub HIGHLIGHT_BUTTON
- '
- ' ****************************************************
- ' Get Start Of This Maze's Data And Reset Undo Pointer
- ' ****************************************************
- MAZE_POINTER=Start(10)+MAZE_NUMBER*260
- UNDO_POINTER=0
- '
- ' ************************************************************
- ' For Each Block, Update Undo Buffer And Then Delete The Block
- ' ************************************************************
- For Y=0 To 12
- For X=0 To 19
- Z=MAZE_POINTER
- Gosub _UPDATE_UNDO_BUFFER
- '
- Poke MAZE_POINTER,0
- Add MAZE_POINTER,1
- Next X
- Next Y
- '
- ' ******************************************
- ' Show The Maze Once It Has All Been Cleared
- ' ******************************************
- Gosub _SHOW_MAZE
- '
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' ******************
- ' Unhighlight Button
- ' ******************
- X0=256 : Y0=224 : X1=287 : Y1=239
- Gosub UNHIGHLIGHT_BUTTON
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' UNDO LAST
- '
- ' Will Undo The Last Block Placing Operation
- ' *************************************************************
- UNDO_LAST:
- If Mouse Zone=7 and UNDO_POINTER>0 and LMB=1
- ' ****************
- ' Highlight Button
- ' ****************
- X0=144 : Y0=224 : X1=191 : Y1=239
- Gosub HIGHLIGHT_BUTTON
- '
- ' *********************
- ' Set Up Undo And Do It
- ' *********************
- UNDO_COUNTER=1
- Gosub _DO_UNDO
- '
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' ******************
- ' Unhighlight Button
- ' ******************
- X0=144 : Y0=224 : X1=191 : Y1=239
- Gosub UNHIGHLIGHT_BUTTON
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' UNDO ALL
- '
- ' Will Undo All Block Placing Operations Back To The Start Of
- ' The Undo Buffer
- ' *************************************************************
- UNDO_ALL:
- If Mouse Zone=8 and UNDO_POINTER>0 and LMB=1
- ' ****************
- ' Highlight Button
- ' ****************
- X0=144 : Y0=240 : X1=191 : Y1=255
- Gosub HIGHLIGHT_BUTTON
- '
- ' *********************
- ' Set Up Undo And Do It
- ' *********************
- UNDO_COUNTER=UNDO_POINTER
- Gosub _DO_UNDO
- '
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' ******************
- ' Unhighlight Button
- ' ******************
- X0=144 : Y0=240 : X1=191 : Y1=255
- Gosub UNHIGHLIGHT_BUTTON
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' DO UNDO
- '
- ' Performs The Undo Operation(s) Specified By Either UNDO LAST
- ' Or UNDO ALL
- ' *************************************************************
- _DO_UNDO:
- Repeat
- ' ***************************
- ' Get Values From Undo Buffer
- ' ***************************
- Add UNDO_POINTER,-1
- X=Peek(UNDO_BASE+(UNDO_POINTER*3))
- Y=Peek(UNDO_BASE+(UNDO_POINTER*3)+1)
- I=Peek(UNDO_BASE+(UNDO_POINTER*3)+2)
- '
- ' *********************************
- ' Change Map Buffer To These Values
- ' *********************************
- MAZE_POINTER=Start(10)+MAZE_NUMBER*260
- Poke MAZE_POINTER+(Y*20)+X,I
- '
- ' *********************
- ' Show Change On Screen
- ' *********************
- Cls 0,X*16,Y*16 To(X*16)+16,(Y*16)+16
- If I>0
- Paste Bob X*16,Y*16,I
- End If
- '
- ' **********************************
- ' Replace Grid Section If Grid Is On
- ' **********************************
- If GRID=1
- Ink 1
- Box X*16,Y*16 To(X*16)+15,(Y*16)+15
- End If
- '
- Add UNDO_COUNTER,-1
- Until UNDO_COUNTER=0
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' BYE!
- '
- ' Quits The Mapper And Returns To The AMOS Editor
- ' *************************************************************
- BYE:
- If Mouse Zone=14 and LMB=1
- ' ****************
- ' Highlight Button
- ' ****************
- X0=288 : Y0=240 : X1=319 : Y1=255
- Gosub HIGHLIGHT_BUTTON
- '
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' ******************
- ' Unhighlight Button
- ' ******************
- X0=288 : Y0=240 : X1=319 : Y1=255
- Gosub UNHIGHLIGHT_BUTTON
- '
- ' ****************
- ' Return To Editor
- ' ****************
- Edit
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' RE-SORT UNDO BUFFER
- '
- ' When The Undo Buffer Is Full, The First Entry Is Removed And
- ' All Other Entries Are Moved Down To Make Space For The Next
- ' Entry. Works On The First In, First Out Principal
- ' *************************************************************
- RESORT_UNDO_BUFFER:
- ' *******
- ' Kerpow!
- ' *******
- For K=0 To 259
- Poke UNDO_BASE+(K*3),Peek(UNDO_BASE+(K*3)+3)
- Poke UNDO_BASE+(K*3)+1,Peek(UNDO_BASE+(K*3)+4)
- Poke UNDO_BASE+(K*3)+2,Peek(UNDO_BASE+(K*3)+5)
- Next K
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' DRAW GRID
- '
- ' Draws A Grid Onto The Maze Work Area
- ' *************************************************************
- _DRAW_GRID:
- If GRID=1
- Ink 1
- For Y=0 To 12
- For X=0 To 19
- Box X*16,Y*16 To(X*16)+15,(Y*16)+15
- Next X
- Next Y
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' TOGGLE GRID
- '
- ' Turns The Grid On Or Off
- ' *************************************************************
- _TOGGLE_GRID:
- If Mouse Zone=12 and LMB=1
- ' ****************
- ' Highlight Button
- ' ****************
- X0=256 : Y0=240 : X1=287 : Y1=255
- Gosub HIGHLIGHT_BUTTON
- '
- ' ******************
- ' Toggle Grid On/Off
- ' ******************
- GRID=1-GRID
- Gosub _SHOW_MAZE
- '
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' ******************
- ' Unhighlight Button
- ' ******************
- X0=256 : Y0=240 : X1=287 : Y1=255
- Gosub UNHIGHLIGHT_BUTTON
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' ************************************************************
- ' DELETE BLOCK
- '
- ' Deletes The Block Underneath The Mouse Pointer
- ' ************************************************************
- DELETE_BLOCK:
- ' *******************************************
- ' Only Do If There Is A Block There To Delete
- ' *******************************************
- MAZE_POINTER=Start(10)+(MAZE_NUMBER*260)+(MOUSE_Y*20)+MOUSE_X
- If Peek(MAZE_POINTER)<>0
- '
- ' ******************
- ' Update Undo Buffer
- ' ******************
- X=MOUSE_X : Y=MOUSE_Y : Z=MAZE_POINTER
- Gosub _UPDATE_UNDO_BUFFER
- '
- ' ************
- ' Delete Block
- ' ************
- Cls 0,MOUSE_X*16,MOUSE_Y*16 To(MOUSE_X*16)+16,(MOUSE_Y*16)+16
- '
- ' **********************************
- ' Replace Grid Section If Grid Is On
- ' **********************************
- If GRID=1
- Ink 1
- Box MOUSE_X*16,MOUSE_Y*16 To(MOUSE_X*16)+15,(MOUSE_Y*16)+15
- End If
- '
- ' *****************
- ' Update Map Buffer
- ' *****************
- MAZE_POINTER=Start(10)+(MAZE_NUMBER*260)+(MOUSE_Y*20)+MOUSE_X
- Poke MAZE_POINTER,0
- '
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' UPDATE UNDO BUFFER
- '
- ' Before A Block Is Placed Into A Maze, The Block Already There
- ' Is Stored In The Undo Buffer So It Can Be Restored If Needed
- ' *************************************************************
- _UPDATE_UNDO_BUFFER:
- K=UNDO_BASE+(UNDO_POINTER*3)
- ' ********************
- ' Some Jiggery Pokery!
- ' ********************
- Poke K,X
- Poke(K+1),Y
- Poke(K+2),Peek(Z)
- Add UNDO_POINTER,1
- '
- If UNDO_POINTER=261
- ' *****************************************
- ' Have To Re-sort Undo Buffer Coz It's Full
- ' *****************************************
- Gosub RESORT_UNDO_BUFFER
- UNDO_POINTER=260
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' COPY
- '
- ' Puts A Copy Of The Current Maze Into The Copy Buffer
- ' *************************************************************
- _COPY:
- If Mouse Zone=5 and LMB=1
- ' ****************
- ' Highlight Button
- ' ****************
- X0=112 : Y0=224 : X1=143 : Y1=239
- Gosub HIGHLIGHT_BUTTON
- '
- ' *******************************************************
- ' Get To Start Of This Maze's Data And Reset Copy Pointer
- ' *******************************************************
- MAZE_POINTER=Start(10)+(MAZE_NUMBER*260)
- _COPY_POINTER=0
- '
- ' *****************************
- ' Copy Maze Data To Copy Buffer
- ' *****************************
- For Y=0 To 12
- For X=0 To 19
- Poke _COPY_BASE+_COPY_POINTER,Peek(MAZE_POINTER)
- Add MAZE_POINTER,1
- Add _COPY_POINTER,1
- Next X
- Next Y
- '
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' ******************
- ' Unhighlight Button
- ' ******************
- X0=112 : Y0=224 : X1=143 : Y1=239
- Gosub UNHIGHLIGHT_BUTTON
- End If
- Return
- '
- ' -------------------------------------------------------------
- '
- ' *************************************************************
- ' PASTE
- '
- ' Changes The Current Maze To The Contents Of The Copy Buffer
- ' *************************************************************
- '
- PASTE:
- If Mouse Zone=6
- ' ****************
- ' Highlight Button
- ' ****************
- X0=112 : Y0=240 : X1=143 : Y1=255
- Gosub HIGHLIGHT_BUTTON
- '
- ' ***********************************
- ' Get To Start Of Maze Data
- ' Reset Undo Pointer And Copy Pointer
- ' ***********************************
- MAZE_POINTER=Start(10)+(MAZE_NUMBER*260)
- UNDO_POINTER=0
- _COPY_POINTER=0
- '
- ' ***********************************************
- ' Put What Is Already In Maze Into Undo Buffer
- ' Then Copy Data From Copy Buffer To Current Maze
- ' ***********************************************
- For Y=0 To 12
- For X=0 To 19
- Z=MAZE_POINTER
- Gosub _UPDATE_UNDO_BUFFER
- '
- Poke MAZE_POINTER,Peek(_COPY_BASE+_COPY_POINTER)
- '
- Add MAZE_POINTER,1
- Add _COPY_POINTER,1
- Next X
- Next Y
- '
- ' ***********
- ' Show Result
- ' ***********
- Gosub _SHOW_MAZE
- '
- LMB=0
- '
- Wait _WAIT_DELAY
- '
- ' ******************
- ' Unhighlight Button
- ' ******************
- X0=112 : Y0=240 : X1=143 : Y1=255
- Gosub UNHIGHLIGHT_BUTTON
- End If
- Return
- '
- ' -------------------------------------------------------------
- '